package com.fwh.web.controller;

import lombok.extern.slf4j.Slf4j;

import javax.websocket.OnClose;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint;
import java.io.IOException;

/**
 * websocket双向通道demo
 * <p>
 * 应用案例:
 * 聊天应用
 * 多人游戏
 * 股票交易和金融应用
 * 文档合作编辑
 * 社交应用
 *
 * @Author: fwh
 * @date 2019/4/12&& 11:47
 */
@Slf4j
@ServerEndpoint("/webSocket")
public class WebSocketController {
    /*
    注意：这个例子还包括了其它两个回调函数：
    @OnOpen标注的方法在WebSocket连接开始时被调用， Web Session作为参数。
    另外一个@OnClose标注的方法在连接关闭时被调用。
     */

    /**
     * 服务端发消息到前端
     *
     * @param message
     * @param session
     * @return void
     * @author:fwh [2019/4/12 && 14:47]
     */
    @OnMessage
    public void onMessage(String message, Session session)
            throws IOException, InterruptedException {
        log.info("接收页面消息为:{}",message);
        session.getBasicRemote().sendText("This is the first server message");
        int sentMessages = 0;
        while (sentMessages < 10) {
            Thread.sleep(2000);
            session.getBasicRemote().
                    sendText("This is an intermediate server message. Count: " + sentMessages);
            sentMessages++;
        }
        session.getBasicRemote().sendText("This is the last server message");
    }

    /**
     * 页面连接上时候调用
     *
     * @param
     * @return void
     * @author:fwh [2019/4/12 && 14:47]
     */
    @OnOpen
    public void onOpen() {
        log.info("客户端已连接上");
    }

    /**
     * 页面断开时候调用
     *
     * @param
     * @return void
     * @author:fwh [2019/4/12 && 14:48]
     */
    @OnClose
    public void onClose() {
        log.info("客户端连接关闭.");
    }


}
